package com.cskaoyan.config;

import com.cskaoyan.dao.UserDao;
import com.cskaoyan.dao.UserDaoImpl;
import com.cskaoyan.service.UserService;
import com.cskaoyan.service.UserServiceImpl;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author stone
 * @date 2022/07/05 17:35
 */
@Configuration
public class SpringConfiguration {


    //通过方法来完成组件注册
    // @Bean对应的方法就是组件注册方法
    // 该方法的返回值就是向容器中注册的组件
    // 返回值类型可以写接口，也可以写实现类，建议写接口
    // 组件id:默认值是方法名；如果想要指定，也可以使用@Bean的value属性指定
    @Bean("userDaoImpl")
    public UserDao userDao() {
        UserDaoImpl userDao = new UserDaoImpl();
        return userDao;
    }
    @Bean("userDaoImpl2")
    public UserDao userDao2() {
        UserDaoImpl userDao = new UserDaoImpl();
        return userDao;
    }

    // @Bean对应的方法的形参 → 从容器中取出组件的
    // 默认是按照类型从容器中取出的，要求该类型的组件在容器中只有一个
    // 如果这个类型的组件不止一个，可以额外指定组件id → @Qualifier
    @Bean
    public UserService userService(@Qualifier("userDaoImpl") UserDao userDao) {
        UserServiceImpl userService = new UserServiceImpl();
        userService.setUserDao(userDao);
        return userService;
    }

}
